/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.adapters;

import java.util.ArrayList;
import java.util.List;
import org.cip.esymons.tesoreria.be.CuentaIngreso;
import org.cip.esymons.tesoreria.be.DetPagoAgrupado;
import org.cip.esymons.tesoreria.be.EnumTipoCuentaIngreso;
import org.cip.esymons.tesoreria.be.MovimientoCuenta;

/**
 *
 * @author Gilmar
 */
public class AdaptadorDeudaMovimientoCuentaIngresoSeleccionadosyAgrupadas implements DeudaCuentaIngresoInterfaz {

    private DeudaMovimiento deudaMovimiento;
    private boolean listarUnoPorUno = false;
    private String nombreColegiado=null;    

    public AdaptadorDeudaMovimientoCuentaIngresoSeleccionadosyAgrupadas(DeudaMovimiento deudaMovimiento) {
        this.deudaMovimiento = deudaMovimiento;
    }

    public AdaptadorDeudaMovimientoCuentaIngresoSeleccionadosyAgrupadas(DeudaMovimiento deudaMovimiento, boolean listarUnoPorUnoDeudaOtros) {
        this.deudaMovimiento = deudaMovimiento;
        this.listarUnoPorUno = listarUnoPorUnoDeudaOtros;
    }

    public AdaptadorDeudaMovimientoCuentaIngresoSeleccionadosyAgrupadas(DeudaMovimiento deudaMovimiento,String nombreColegiado) {
        this.deudaMovimiento = deudaMovimiento;
        this.nombreColegiado = nombreColegiado;
    }

    public AdaptadorDeudaMovimientoCuentaIngresoSeleccionadosyAgrupadas(DeudaMovimiento deudaMovimiento, boolean listarUnoPorUnoDeudaOtros,String nombreColegiado) {
        this.deudaMovimiento = deudaMovimiento;
        this.listarUnoPorUno = listarUnoPorUnoDeudaOtros;
        this.nombreColegiado = nombreColegiado;
    }

    public List<DetPagoAgrupado> getListaDeudaxIngreso() {
        try {
            List<DetPagoAgrupado> listaConAgrupador = new ArrayList<DetPagoAgrupado>();
            List<DetPagoAgrupado> lista = new ArrayList<DetPagoAgrupado>();
            DetPagoAgrupado dci = null;
            CuentaIngreso cuentaIngresoPadre = null;
            String cadenaInicial = null;
            String cadenaFinal = null;
            Double monto = 0.0;
            for (MovimientoCuenta mc : deudaMovimiento.getListaMovimientos()) {
                if (mc.isSeleccionado()) {
                    monto += mc.getMcuSaldo();
                    if (cuentaIngresoPadre == null) {
                        if (mc.getFkCinCodigo() != null) {
                            cuentaIngresoPadre = mc.getFkCinCodigo();
                            while (cuentaIngresoPadre.getFkCinCodigoPadre() != null) {
                                cuentaIngresoPadre = cuentaIngresoPadre.getFkCinCodigoPadre();
                            }
                        } else {
                            cuentaIngresoPadre = new CuentaIngreso("000", "Fraccionamiento");
                            cuentaIngresoPadre.setFkCinCodigoPadre(null);
                        }
                    }

                    dci = new DetPagoAgrupado();
                    dci.setAnio(mc.getMcuAnio());
                    dci.setCantidad(1);
                    if (mc.getFkCinCodigo() == null) {
                        dci.setCuentaIngreso(new CuentaIngreso("000", "Fraccionamiento"));
                        if (cadenaInicial == null) {
                            cadenaInicial = mc.getDescripcion();
                        }
                        dci.getCuentaIngreso().setFkCinCodigoPadre(new CuentaIngreso("000", "Fraccionamiento"));
                        dci.setDescripcion(mc.getDescripcion());
                        dci.setSubDetalle(true);
                        cadenaFinal = mc.getDescripcion();
                    } else {
                        dci.setCuentaIngreso(mc.getFkCinCodigo());
                        if (cadenaInicial == null) {
                            cadenaInicial = String.valueOf(mc.getMcuAnio()).concat("-").concat(String.valueOf(mc.getMcuMes()));
                        }
                        dci.setDescripcion(mc.getFkCinCodigo().getNombreLargoCuentaIngreso() + "-" + mc.getDescripcion());
                        cadenaFinal = String.valueOf(mc.getMcuAnio()).concat("-").concat(String.valueOf(mc.getMcuMes()));
                        if (mc.getFkCinCodigo().getTipo().equals(EnumTipoCuentaIngreso.Cuota_CIP)||mc.getFkCinCodigo().getTipo().equals(EnumTipoCuentaIngreso.Evento)) {
                            dci.setSubDetalle(true);
                        }
                    }
                    if(nombreColegiado!=null){
                        dci.setDescripcion(nombreColegiado+" : "+dci.getDescripcion());
                    }
                    dci.setMes(mc.getMcuMes());
                    dci.getListaMovimientos().add(mc);
                    dci.setValor(mc.getMcuSaldo());
                    dci.setValorModificable(mc.getMcuSaldo());
                    if (lista.contains(dci)) {
                        if (listarUnoPorUno) {
                            lista.add(dci);
                        } else {
                            DetPagoAgrupado deuda = lista.get(lista.indexOf(dci));
                            deuda.setCantidad(deuda.getCantidad() + 1);
                            deuda.setAnio(mc.getMcuAnio());
                            deuda.setMes(mc.getMcuMes());
                            deuda.setValor(deuda.getValor() + mc.getMcuSaldo());
                            deuda.setValorModificable(deuda.getValorModificable() + mc.getMcuSaldo());
                            deuda.getListaMovimientos().add(mc);
                        }
                    } else {
                        lista.add(dci);
                    }
                }
            }
            if (cadenaInicial != null) {
                dci = new DetPagoAgrupado();
                dci.setAnio(lista.get(0).getAnio());
                dci.setCantidad(lista.get(0).getCantidad());
                dci.setDescripcion(cuentaIngresoPadre.getCinDesc().concat("-").concat(cadenaInicial).concat(" : ").concat(cadenaFinal));
                if(nombreColegiado!=null){
                    dci.setDescripcion(nombreColegiado+" : "+dci.getDescripcion());
                }
                dci.setCuentaIngreso(cuentaIngresoPadre);
                dci.setMes(lista.get(0).getMes());
                dci.setValor(monto);
                dci.setValorModificable(monto);
                dci.setSumarAlMonto(false);
                listaConAgrupador.add(dci);
            }
            listaConAgrupador.addAll(lista);
            return listaConAgrupador;
        } catch (Exception ex) {
            return new ArrayList<DetPagoAgrupado>();
        }

    }

    public void setListaDeudaxIngreso(List<DetPagoAgrupado> listaDeudaxIngreso) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
